/**
 * @file 工具方法
 * @module libs/utils
 * @author 月落 <yueluo.yang@qq.com>
 */

/**
 * @description 异步迭代
 * @param {array} data - 数据源 
 * @param {function} fn - 执行函数
 * @param {function} callback - 成功回调函数
 * @returns {promise} 
 */
function asyncForEach (data, fn, callback) {
  return new Promise((resolve, reject) => {
    const total = data.length;

    let count = 0;

    const next = () => {
      if (count < total) {
        return fn(data[count], count++, next);
      }
      callback ? callback(resolve) : resolve();
    }

    next();
  });
}

// 导出工具函数
module.exports = {
  asyncForEach
}